package com.icoolkj.ms.auth.service;

import com.icoolkj.ms.api.auth.bo.UserInfoInTokenBO;
import com.icoolkj.ms.api.auth.model.AuthAccount;
import com.icoolkj.ms.api.auth.vo.AuthAccountVO;
import com.icoolkj.ms.common.core.response.ServerResponseEntity;

/**
 * @author icoolkj
 * @version 1.0
 * @description 认证用户服务接口
 * @createDate 2025/02/04 16:33
 */
public interface IAuthAccountService {

    /**
     * 通过用户名和密码获取用户信息
     *
     * @param inputUserName 用户名
     * @param password      密码
     * @param userType      用户类型
     * @return 用户信息
     */
    ServerResponseEntity<UserInfoInTokenBO> getUserInfoInTokenByInputUserNameAndPassword(String inputUserName, String password, String userType);

    /**
     * 通过手机号获取用户信息
     *
     * @param phoneNumber 手机号
     * @param userType    用户类型
     * @return 用户信息
     */
    ServerResponseEntity<UserInfoInTokenBO> getUserInfoInTokenByPhone(String phoneNumber, String userType);

    /**
     * 通过邮箱获取用户信息
     *
     * @param email    邮箱
     * @param userType 用户类型
     * @return 用户信息
     */
    ServerResponseEntity<UserInfoInTokenBO> getUserInfoInTokenByEmail(String email, String userType);

    /**
     * 根据输入的用户名类型和用户名获取用户信息
     *
     * @param inputUserNameType 输入用户名类型
     * @param inputUserName     输入用户名
     * @param userType          用户类型
     * @return 用户信息
     */
    ServerResponseEntity<AuthAccountVO> getByInputUsernameAndUserType(Integer inputUserNameType, String inputUserName, String userType);

    /**
     * 保存认证账户信息
     *
     * @param authAccount 认证账户信息
     * @return 影响行数
     */
    int saveAuthAccount(AuthAccount authAccount);

    /**
     * 根据用户ID逻辑删除账户
     *
     * @param uid 用户ID
     * @return 影响行数
     */
    int deleteByUid(Long uid);

    /**
     * 批量逻辑删除账户
     *
     * @param uids 用户ID数组
     * @return 影响行数
     */
    int batchDeleteByUids(Long[] uids);

}
